package com.vviton.zyhj.admin.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.vviton.zyhj.admin.service.QzjyjsService;
import com.vviton.zyhj.common.base.AppConfig;
import com.vviton.zyhj.common.base.BaseService;
import com.vviton.zyhj.common.common.CodeConstants;
import com.vviton.zyhj.common.common.CommonConstants;
import com.vviton.zyhj.common.common.ExcelConstants;
import com.vviton.zyhj.common.dao.TYyxtHzglHzgxbMapper;
import com.vviton.zyhj.common.dao.TYyxtHzglJsjlbMapper;
import com.vviton.zyhj.common.entity.TYyxtCode;
import com.vviton.zyhj.common.entity.TYyxtHzglHzgxb;
import com.vviton.zyhj.common.entity.TYyxtHzglJsjlb;
import com.vviton.zyhj.common.utils.DateUtils;
import com.vviton.zyhj.common.utils.ExcelUtil;
import com.vviton.zyhj.common.utils.ResultJson;
import com.vviton.zyhj.common.utils.page.Page;
import com.vviton.zyhj.common.view.ParmJsjlcx;
import com.vviton.zyhj.common.view.ViewJsjl;

/**
 * ClassName: QzjyjsServiceImpl <br/>
 * Function: 全站交易service实现. <br/>
 * Date: 2016年11月18日 上午9:21:11 <br/>
 *
 * @author qiaocf
 * @version 1.0
 * @since JDK 1.7
 */
public class QzjyjsServiceImpl extends BaseService implements QzjyjsService {

    /** 日志 */
    private static Logger logger = Logger.getLogger(QzjyjsServiceImpl.class);

    /** 结算记录DAO **/
    @Autowired
    private TYyxtHzglJsjlbMapper tYyxtHzglJsjlbMapper;

    /** 合作方关系Mapper **/
    @Autowired
    private TYyxtHzglHzgxbMapper tYyxtHzglHzgxbMapper;

    /** 读取配置文件信息 */
    @Autowired
    private AppConfig appConfig;

    /**
     * getJsxxpagination,(结算信息分页查询). <br/>
     * Author: qiaocf<br/>
     * Create Date: 2016年11月18日 <br/>
     * =============================================================== <br/>
     * Modifier: Administrator <br/>
     * Modify Date: 2016年11月18日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param param 参数类
     * @return 分页结果
     * @since JDK 1.7
     */
    @Override
    public Page getJsxxpagination(ParmJsjlcx param) {

        logger.info("结算信息分页查询begin");

        Page page = new Page();
        page.setCurrPage(param.getCurrPage());
        page.setPageSize(param.getPageSize());
        page.setParam(param);
        return Serach(page);

    }

    /**
     * getJsDclpagination,(结算信息待处理分页查询). <br/>
     * Author: qiaocf<br/>
     * Create Date: 2016年11月18日 <br/>
     * =============================================================== <br/>
     * Modifier: Administrator <br/>
     * Modify Date: 2016年11月18日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param 参数类
     * @return 分页结果
     * @since JDK 1.7
     */
    @Override
    public Page getJsDclpagination(ParmJsjlcx param) {
        Page page = new Page();
        page.setCurrPage(param.getCurrPage());
        page.setPageSize(param.getPageSize());
        param.setJszt(CodeConstants.JSZT_WJS);
        page.setParam(param);
        return Serach(page);
    }

    /**
     *
     * Serach,(查询私有方法). <br/>
     * Author: qiaocf <br/>
     * Create Date: 2016年11月18日 <br/>
     * ===============================================================<br/>
     * Modifier: Administrator <br/>
     * Modify Date: 2016年11月18日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     *
     * @param page 分页参数
     * @return 分页结果
     * @since JDK 1.7
     */
    private Page Serach(Page page) {
        logger.info("结算信息分页查询begin");
        int count = tYyxtHzglJsjlbMapper.countJsxxpagination(page);
        page.setTotal(count);
        List<ViewJsjl> lpxxList = new ArrayList<ViewJsjl>();
        if (count > 0) {
            lpxxList = tYyxtHzglJsjlbMapper.getJsxxpagination(page);
            Map<String, TYyxtCode> jsztMap = this.getCodeMapCodeclass(CodeConstants.JSZT);
            for (ViewJsjl viewJsjl : lpxxList) {
                String code = viewJsjl.getJszt();
                TYyxtCode tYyxtCode = jsztMap.get(CodeConstants.JSZT + code);
                if (tYyxtCode != null) {
                    String desc = tYyxtCode.getCodedesc();
                    viewJsjl.setJsztDesc(desc);
                }
            }
            page.setData(lpxxList);
        }
        logger.info("结算信息分页查询end");
        return page;
    }

    /**
     * getDclCnt,(获取待处理个数). <br/>
     * Author: qiaocf<br/>
     * Create Date: 2016年11月18日 <br/>
     * =============================================================== <br/>
     * Modifier: Administrator <br/>
     * Modify Date: 2016年11月18日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param param 参数类
     * @return 个数
     * @since JDK 1.7
     */
    @Override
    public Integer getDclCnt(ParmJsjlcx param) {
        Page page = new Page();
        param.setJszt(CodeConstants.JSZT_WJS);
        page.setParam(param);
        Integer count = tYyxtHzglJsjlbMapper.countJsxxpagination(page);
        return count;
    }

    /**
     *
     * pldcJsxx,EXCEL导出结算信息表. <br/>
     * Author: tangli <br/>
     * Create Date: 2016年12月5日 <br/>
     * =============================================================== <br/>
     * Modifier: tangli <br/>
     * Modify Date: 2016年12月5日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param param 请求参数
     * @param res response
     * @return ResultJson
     * @since JDK 1.7
     */
    @Override
    public ResultJson pldcJsxx(ParmJsjlcx param, HttpServletResponse res) {
        logger.info("EXCEL导出结算信息begin");
        ResultJson result = new ResultJson(false);
        List<ViewJsjl> lpxxList = new ArrayList<ViewJsjl>();
        lpxxList = tYyxtHzglJsjlbMapper.getAllJsxx(param);
        if (lpxxList != null && lpxxList.size() > 0) {
            Map<String, TYyxtCode> jsztMap = this.getCodeMapCodeclass(CodeConstants.JSZT);
            for (ViewJsjl viewJsjl : lpxxList) {
                viewJsjl.setSqsjFormat(DateUtils.format(viewJsjl.getSqsj(), DateUtils.PATTERN_DATETIME));
                viewJsjl.setJssjFormat(DateUtils.format(viewJsjl.getJssj(), DateUtils.PATTERN_DATETIME));

                String code = viewJsjl.getJszt();
                TYyxtCode tYyxtCode = jsztMap.get(CodeConstants.JSZT + code);
                if (tYyxtCode != null) {
                    String desc = tYyxtCode.getCodedesc();
                    viewJsjl.setJsztDesc(desc);
                }
            }
        } else {
            lpxxList = new ArrayList<ViewJsjl>();
            ViewJsjl viewJsjl = new ViewJsjl();
            lpxxList.add(viewJsjl);
        }

        if (CollectionUtils.isNotEmpty(lpxxList)) {
            if (StringUtils.isNotBlank(appConfig.getLang())) {
                ExcelUtil.exportTemplate(res, ExcelConstants.JSCXGL_TEMPLATE_PATH, lpxxList, ExcelConstants.JSCXGL_FILENAME_EN);
            } else {
                ExcelUtil.exportTemplate(res, ExcelConstants.JSCXGL_TEMPLATE_PATH, lpxxList, ExcelConstants.JSCXGL_FILENAME);
            }

            result.setResult(true);
        }
        logger.info("EXCEL导出结算信息end");
        return result;
    }

    /**
     *
     * pldcJsDcl,EXCEL导出结算信息待处理. <br/>
     * Author: tangli <br/>
     * Create Date: 2016年12月6日 <br/>
     * =============================================================== <br/>
     * Modifier: tangli <br/>
     * Modify Date: 2016年12月6日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param ids 请求参数
     * @param res response
     * @return ResultJson
     * @since JDK 1.7
     */
    @Override
    public ResultJson pldcJsDcl(String ids, HttpServletResponse res) {

        logger.info("EXCEL导出结算信息待处理begin");
        ResultJson result = new ResultJson(false);
        String[] idList = ids.split(",");
        List<ViewJsjl> lpxxList = new ArrayList<ViewJsjl>();
        lpxxList = tYyxtHzglJsjlbMapper.getJsxxByIds(idList);
        if (lpxxList != null && lpxxList.size() > 0) {
            Map<String, TYyxtCode> jsztMap = this.getCodeMapCodeclass(CodeConstants.JSZT);
            for (ViewJsjl viewJsjl : lpxxList) {
                viewJsjl.setSqsjFormat(DateUtils.format(viewJsjl.getSqsj(), DateUtils.PATTERN_DATETIME));
                viewJsjl.setJssjFormat(DateUtils.format(viewJsjl.getJssj(), DateUtils.PATTERN_DATETIME));

                String code = viewJsjl.getJszt();
                TYyxtCode tYyxtCode = jsztMap.get(CodeConstants.JSZT + code);
                if (tYyxtCode != null) {
                    String desc = tYyxtCode.getCodedesc();
                    viewJsjl.setJsztDesc(desc);
                }
            }
        } else {
            lpxxList = new ArrayList<ViewJsjl>();
            ViewJsjl viewJsjl = new ViewJsjl();
            lpxxList.add(viewJsjl);
        }

        if (CollectionUtils.isNotEmpty(lpxxList)) {
            if (StringUtils.isNotBlank(appConfig.getLang())) {
                ExcelUtil.exportTemplate(res, ExcelConstants.JSCLGL_TEMPLATE_PATH, lpxxList, ExcelConstants.JSCLGL_FILENAME_EN);
            } else {
                ExcelUtil.exportTemplate(res, ExcelConstants.JSCLGL_TEMPLATE_PATH, lpxxList, ExcelConstants.JSCLGL_FILENAME);
            }

            result.setResult(true);
        }
        logger.info("EXCEL导出结算信息待处理end");
        return result;
    }

    /**
     * getHzgxbxx,(获取合作方关系信息). <br/>
     * Author: zhucb <br/>
     * Create Date: 2016年12月7日 <br/>
     * =============================================================== <br/>
     * Modifier: zhucb <br/>
     * Modify Date: 2016年12月7日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param zh 账号
     * @param ywy 业务域
     * @return TYyxtHzglHzgxb
     * @since JDK 1.7
     */
    @Override
    public TYyxtHzglHzgxb getHzgxbxx(String zh, String ywy) {
        return tYyxtHzglHzgxbMapper.getHzgxbxx(zh, ywy);
    }

    /**
     * updateJsztByID,(根据id更新结算结算表中的结算状态). <br/>
     * Author: zhucb <br/>
     * Create Date: 2016年12月19日 <br/>
     * =============================================================== <br/>
     * Modifier: zhucb <br/>
     * Modify Date: 2016年12月19日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param id 编号
     * @param zh 账号
     * @return ResultJson
     * @since JDK 1.7
     */
    @Override
    public ResultJson updateJsztByID(String id, String zh) {
        ResultJson resultJson = new ResultJson(false);
        TYyxtHzglJsjlb jsjlb = tYyxtHzglJsjlbMapper.getJsjlbByZfbddbh(id);
        if (CodeConstants.JSZT_WJS.equals(jsjlb.getJszt())) {
            jsjlb.setJszt(CodeConstants.JSZT_JSZ);
            jsjlb.setDelflag(CommonConstants.DELFLAG_UPDATE);
            jsjlb.setVersions(this.getVersion());
            jsjlb.setOperatercode(zh);
            jsjlb.setOperatetime(new Date());
            Integer cnt = tYyxtHzglJsjlbMapper.updateJsztByID(jsjlb);
            if (cnt > 0) {
                resultJson.setResult(true);
            }
        }

        return resultJson;
    }

    /**
     *
     * updateClwjs,(更新结算未处理状态). <br/>
     * Author: tangli <br/>
     * Create Date: 2016年12月19日 <br/>
     * =============================================================== <br/>
     * Modifier: tangli <br/>
     * Modify Date: 2016年12月19日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     *
     * @param id 请求id
     * @param zh 账号
     * @return ResultJson
     * @since JDK 1.7
     */
    @Override
    public ResultJson updateClwjs(String id, String zh) {
        logger.info("更新结算未处理状态begin");

        ResultJson rs = new ResultJson(false);
        TYyxtHzglJsjlb jsjlb = tYyxtHzglJsjlbMapper.getJsjlbByZfbddbh(id);
        if (jsjlb != null && CodeConstants.JSZT_JSZ.equals(jsjlb.getJszt())) {
            jsjlb.setJszt(CodeConstants.JSZT_WJS);
            jsjlb.setDelflag(CommonConstants.DELFLAG_UPDATE);
            jsjlb.setVersions(this.getVersion());
            jsjlb.setOperatercode(zh);
            jsjlb.setOperatetime(new Date());
            Integer cnt = tYyxtHzglJsjlbMapper.updateJsztByID(jsjlb);
            if (cnt > 0) {
                rs.setResult(true);
            }
        }
        logger.info("更新结算未处理状态end");
        return rs;
    }
}
